// pages/home/home.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    //  30.674153,111.185151
    latitude: 30.674153, // 默认纬度
    longitude: 111.185151, // 默认经度
    active_list: [],
    all_list: [],
    search_msg: '', // 搜索内容
    // 标注点数据
    // 地图上可以显示多个标注点，每个标注点的位置、图标和提示内容可能不同。
    markers: []
  },
  // 分享转发小程序
  onShareAppMessage() {
    return {
      title: '发现一个好物，快来看看！',
      path: '/pages/home/home',
      imageUrl: '/images/MBH.jpg'
    };
  },
  /**
   * 生命周期函数--监听页面加载
   */
  // 获取云数据库中的数据函数
  getData() {
    const db = wx.cloud.database()
    // 执行查询、更新等操作时，需要用它来生成特定操作指令。
    const _ = db.command
    db.collection('actives').where({
        isDeleted: _.neq(true) // 数据库层面过滤已删除
      })
      .get({
        success: (res) => {
          console.log("数据库数据请求成功：", res);
          const active_list = res.data;

          // 将数据库中的数据转换为地图标记点
          // 动态设置标记点
          const markers = active_list.map(item => {
            return {
              id: item._id, // 使用数据库中的唯一ID作为标记点的ID
              latitude: item.latitude, // 纬度
              longitude: item.longitude, // 经度
              iconPath: '/miniprogram/images/icons/position.png', // 标记点图标路径
              width: 20, // 图标宽度
              height: 30, // 图标高度
              callout: { // 标注点的气泡提示
                content: item.name,
                color: "#000",
                fontSize: 14,
                bgColor: "#fff",
                padding: 5,
                borderRadius: 5,
                display: "ALWAYS" //'BYCLICK':点击显示; 'ALWAYS':常显
              }
            };
          });

          // 更新页面数据
          this.setData({
            active_list,
            all_list: active_list,
            markers // 更新地图标记点
          });
        },
        fail(err) {
          console.log("数据库数据请求失败：", err);
        }
      });
  },
  // 前往活动详情
  view_detail(e) {
    console.log(e)
    const _id = e.currentTarget.dataset.info._id

    const db = wx.cloud.database()
    const _ = db.command
    // 使用 inc 原子操作符递增 views
    db.collection('actives').doc(_id).update({
      data: {
        views: _.inc(1) // 原子递增1，无需查询当前值
      },
      success(res) {
        console.log("活动浏览量+1", res);
      },
      fail(err) {
        console.error("更新失败", err);
      }
    });

    wx.navigateTo({
      url: `/pages/active_detail/detail?_id=${_id}`,
    })
  },
  // 搜索功能
  search() {
    const search_msg = this.data.search_msg; // 将搜索词转换为小写
    console.log("搜索的值：", search_msg)
    if (search_msg) {
      // 过滤数据
      const new_active_list = this.data.active_list.filter((item) => {
        return item.name.includes(search_msg); // 不区分大小写
      });
      console.log('搜索：', new_active_list)
      // 更新页面数据
      this.setData({
        active_list: new_active_list // 使用 filtered_list 存储过滤结果
      });
    } else {
      // 如果搜索词为空，恢复完整列表                                   
      console.log("表单值为空", this.data.search_msg)
      this.setData({
        active_list: this.data.all_list // 恢复原始数据
      });
    }
  },
  // 表单改变事件
  Oninput(e) {
    console.log(e)
    const search_msg = e.detail.value
    this.setData({
      search_msg
    })
  },
  // 点击某个例子是更改中心点
  edit_cebter(e) {
    console.log(e)
    const latitude = e.currentTarget.dataset.item.latitude;
    const longitude = e.currentTarget.dataset.item.longitude;
    this.setData({
      latitude,
      longitude
    })
  },
  // 通过内存中的openid来获取到登录用户的信息
  user_info() {
    const db = wx.cloud.database()
    wx.getStorage({
      key: 'openid', // 需要获取的缓存 key
      success: (res) => {
        if (res.data) {
          const openid = res.data
          // 获取用户信息
          db.collection('users').where({
              _openid: openid
            })
            .get()
            .then((res) => {
              console.log('获取成功：', res.data)
              const user_id = res.data[0]._id;
              wx.setStorage({
                key: 'user_id', // 定义存储的键名
                data: user_id, // 要存储的数据
                success: function () {
                  console.log('用户ID存储成功');
                },
                fail: function (err) {
                  console.error('用户ID存储失败', err);
                }
              });
            })
            .catch((err) => {
              console.log('获取失败：', err)
            })
        } else {
          wx.showToast({
            title: '您当前还未登录',
            icon: 'error'
          })
        }
      },
      fail(err) {
        console.error('获取缓存失败', err);
      }
    });
  },
  onLoad(options) {
    // 进入页面时显示加载提示
    wx.showLoading({
      title: '加载中...',
      // mask: true // 可选：添加遮罩层防止误操作
      duration: 5000 // 可选，设置加载时长
    });
    // 获取用户当前位置
    wx.getLocation({
      type: 'wgs84',
      success: (res) => {
        console.log('用户的位置', res);
        this.setData({
          // longitude: res.longitude,
          // latitude: res.latitude,
        });
        console.log("用户位置：", res.longitude, res.latitude)
      },
      fail: (err) => {
        console.error('获取位置失败', err);
        if (err.errMsg === 'getLocation:fail auth deny') {
          wx.showModal({
            title: '提示',
            content: '需要授权位置权限才能使用地图功能',
            showCancel: false,
            success: () => {
              wx.openSetting({
                success(settingdata) {
                  if (settingdata.authSetting['scope.userLocation']) {
                    // 用户重新授权后，重新获取位置
                    wx.getLocation({
                      type: 'wgs84',
                      success: (res) => {
                        // this.setData({
                        //   longitude: res.longitude,
                        //   latitude: res.latitude,
                        // });
                      }
                    });
                  }
                }
              });
            }
          });
        }
      }
    });
  },
  onShow() {
    // 在钩子函数中调用数据函数
    this.getData()
    // 通过内存中的openid来获取到登录用户的信息
    this.user_info()
    wx.hideLoading()
  }
})